package com.zenithmind.version.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 文件内容实体类 - 遵循单一职责原则，专门处理文件内容存储
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("version_file_content")
@Schema(description = "文件内容实体")
public class FileContent extends BaseEntity {

    /**
     * 文件版本ID
     */
    @Schema(description = "文件版本ID")
    private String fileVersionId;

    /**
     * 文件内容（文本文件）
     */
    @Schema(description = "文件内容（文本文件）")
    private String content;

    /**
     * 文件大小（字节）
     */
    @Schema(description = "文件大小（字节）")
    private Long fileSize;

    /**
     * 文件权限
     */
    @Schema(description = "文件权限")
    private String permissions;

    /**
     * 文件模式
     */
    @Schema(description = "文件模式")
    private String mode;

    /**
     * 是否大文件（0-否，1-是）
     */
    @Schema(description = "是否大文件（0-否，1-是）")
    private Integer isLargeFile;

    /**
     * 检查是否为大文件
     * 
     * @return 是否为大文件
     */
    public boolean isLargeFile() {
        return Integer.valueOf(1).equals(this.isLargeFile);
    }
    
    /**
     * 获取格式化的文件大小
     * 
     * @return 格式化的大小字符串
     */
    public String getFormattedSize() {
        if (fileSize == null || fileSize == 0) {
            return "0 B";
        }
        
        String[] units = {"B", "KB", "MB", "GB", "TB"};
        int unitIndex = 0;
        double sizeValue = fileSize.doubleValue();
        
        while (sizeValue >= 1024 && unitIndex < units.length - 1) {
            sizeValue /= 1024;
            unitIndex++;
        }
        
        return String.format("%.1f %s", sizeValue, units[unitIndex]);
    }
    
    /**
     * 获取内容行数
     * 
     * @return 行数
     */
    public int getLineCount() {
        if (content == null || content.isEmpty()) {
            return 0;
        }
        return content.split("\n").length;
    }
    
    /**
     * 检查内容是否为空
     * 
     * @return 是否为空
     */
    public boolean isEmpty() {
        return content == null || content.trim().isEmpty();
    }
    
    /**
     * 获取内容预览（前100个字符）
     * 
     * @return 内容预览
     */
    public String getContentPreview() {
        if (content == null || content.isEmpty()) {
            return "";
        }
        if (content.length() <= 100) {
            return content;
        }
        return content.substring(0, 100) + "...";
    }
}
